/**
 * Copyright 2011 Joao Miguel Pereira
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package eu.jpereira.trainings.designpatterns.structural.decorator.channel.decorator;

import eu.jpereira.trainings.designpatterns.structural.decorator.channel.SocialChannel;


/**
 * @author jpereira
 * 
 */
public class WordCensor extends SocialChannelDecorator
{

        private String pattern = "";

        public WordCensor(String pattern)
        {
                this.pattern = pattern;
        }

        public WordCensor(String i, SocialChannel decoratedChannel)
        {
                this.pattern = i;
                this.delegate = decoratedChannel;
        }

        @Override
        public void deliverMessage(String message)
        {
                String[] sentence = message.split(" ");
                for(int i = 0; i < sentence.length; i++)
                {
                    if(sentence[i].matches(pattern) || sentence[i].matches(pattern + "(\\W)"))
                    {
                        sentence[i] = sentence[i].replace(pattern, "#");
                    }
                }
                StringBuilder builder = new StringBuilder();
                builder.append(sentence[0]);
                if( sentence.length > 1)
                {
                        for(int i = 1; i < sentence.length; i++)
                                builder.append(" " +  sentence[i]);
                        message = builder.toString();
                }
                delegate.deliverMessage(message);
                System.out.println("Ocenzurowano -> " + builder.toString());
        }
}
